package com.syedu.day05;

import java.util.Arrays;

/**
 * description：数组元素增删
 * 数组是固定容器,一旦创建长度无法改变!!!
 *
 * @author Administrator
 * @date 2022/3/10 16:38
 */
public class ArrayDemo2 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        //arr.length = 5;//编译错误,长度无法改变

        //数组元素的增删,是通过创建新数组容器,然后拷贝原数组数据到新数组中来间接实现的!
        //1.自己写代码实现,参见ArrayUtil类

        /**
         *  2.JDK内置功能,数组元素拷贝方法
         *
         *  System.arraycopy(src,srcPos,dest,destPos,length);
         *
         *  src         原数组
         *  srcPos      拷贝元素所在原数组的起始下标
         *  dest        目标数组
         *  destPos     元素复制到目标数组的起始下标
         *  length      拷贝一次一共复制多少个元素
         */
        //例如在数组1,2,3中2和3之间添加8
        //a.创建一个新数组,长度为原数组的长度+1
        int[] newArr = new int[arr.length + 1];
        //b.把1,2复制到新数组的前两个位置
        System.arraycopy(arr, 0, newArr, 0, 2);
        //c.把3复制到新数组的最后一个位置
        System.arraycopy(arr, 2, newArr, 3, 1);
        //d.把添加的元素赋值即可
        newArr[2] = 8;
        System.out.println(Arrays.toString(newArr));

        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

        //删除3
        int[] arr2 = {1, 2, 3, 4, 5};
        int[] newArr2 = new int[arr2.length - 1];
        System.arraycopy(arr2, 0, newArr2, 0, 2);
        System.arraycopy(arr2, 3, newArr2, 2, 2);
        System.out.println(Arrays.toString(newArr2));

        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

        /**
         * JDK6的数组拷贝新方法: Arrays.copyOf();
         * 注意: 此方法适合在数组尾部扩容添加元素/减容删除元素使用
         */
        int[] arr3 = {1, 2, 3, 4};
        int[] newArr3 = Arrays.copyOf(arr3, 3);
        System.out.println(Arrays.toString(newArr3));
    }
}